//
//  HSMessageslistViewModel.swift
//  HomeSchoolDemo
//
//  Created by Mac on 16/10/10.
//  Copyright © 2016年 chendong. All rights reserved.
//

import UIKit



/// 判断刷新类型的枚举
///
/// - pull//上拉: 上拉
/// - drop//下拉: 下拉
enum loadType {
    case pull //上拉
    case drop //下拉
}

//定义闭包类型
typealias callback = (_ err:Error?,_ isRefresh:Bool) -> ()

class HSMessageslistViewModel: NSObject {
    
    //模型数据
    var messages:[HSMessageViewModel] = []
    
    //请求数据
    func requestMessage(loadType:loadType, finished:@escaping callback) {
        //接口地址
        let url = "ZH-schoolname-S-getJXNotification"
        //参数
        let key = userInfo["key"] as! String
        //根据刷新类型来获得通知的ID
        //获得当前最小的通知ID
        let minID = messages.last?.message.not_id ?? 0
        //根据刷新类型来获得通知的ID
        let id = (loadType == .drop) ? 0 : minID
        //根据刷新类型来获得刷新类型
        let lType = (loadType == .drop) ? 1 : 2
        let param = ["key":key,"id":id,"load_type":lType] as [String:Any]
        //开始网络请求
        HSNetworkTools.shared.downloadData(url: url, parameters: param) {[weak self] (data, error) in
            //守护
            guard let data = data as? NSDictionary else {
                HSAlertView.bottomAlertView("请检查网络连接")
                //网络加载失败，也要通知控制器做处理
                finished(error, false)
                return
            }
            
            //判断返回数据的正确
            switch data["result"] as! Int{
            case 0:
                //print(data["data"])
                //字典转模型
                let dictArray = data["data"] as! [[String:Any]]
                //创建一个保存模型的数组
                var modelArray = [HSMessageViewModel]()
                //循环
                for dict in dictArray{
                    //创建一个模型对象
                    let message = HSMessageModel(dict: dict)
                    //获得模型中的回复数据数组
                    if let replayArray = message.replaylist {
                        //创建一个可变的保存回复数据模型的数组
                        var replayMArray = [HSReplaylistModel]()
                        //循环
                        for rDict in replayArray {
                            //实例化一个回复模型
                            let replayModel = HSReplaylistModel(dict: rDict as! [String:Any])
                            //添加到数组
                            replayMArray.append(replayModel)
                        }
                        //从新将转换好的回复模型数组赋值给消息模型
                        message.replaylist = replayMArray
                    }
                    //添加到消息模型数组中
                    modelArray.append(HSMessageViewModel(model: message))
                }
                //根据刷新类型来判断数据的他添加方式
                //下拉的时候是覆盖原有的数据
                //上拉的时候是将新获得的数据添加到已有数据的后面
                if loadType == .drop{
                //赋值
                self?.messages = modelArray
                }else{
                    self?.messages = (self?.messages)! + modelArray
                }
                //数据正常处理完成,刷新视图
                finished(nil, true)
                
            case 1:
                HSAlertView.bottomAlertView("已经没有更早的数据了")
                //print(data)
                //网络正常，但是数据加载失败，通知控制爱不需要刷新视图
                finished(nil, false)
            default:
                break
            }
            
            //print(data,error)
            
        }
    }
}
